home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / tcisam.zip / INXDEFS.H < prev    next >
Text File  |  1987-08-21  |  3KB  |  91 lines

  1. /*
  2.  * INXDEFS.H - data definitions for all index modules
  3.  *
  4.  *            Copyright (c) 1987, Jim Mischel
  5.  * Modifications:
  6.  *
  7.  * 08/13/87 - jim - original coding
  8.  */
  9. #define __INDEX__
  10. /*#define FLOAT_KEY             /* for float and double keys */
  11.  
  12. #include <stdio.h>
  13. #include <io.h>
  14. #include <alloc.h>
  15. #include <mem.h>
  16. #include <string.h>
  17. #include "index.h"
  18.  
  19.  
  20. #define fsize(f) filelength(fileno((f)))
  21.  
  22. /* index file record */
  23. typedef struct {
  24.   long if_dat_ptr,              /* pointer to data file record */
  25.        if_left_node,            /* left descendent */
  26.        if_right_node,           /* right descendent */
  27.        if_parent;               /* there's got to be a better way!!! */
  28.   char if_flags;                /* flags */
  29. } inx_rec;
  30.  
  31. /* database control record */
  32. typedef struct {
  33.   char *df_path;                /* pathname (no extension) */
  34.   FILE *df_inx_file,            /* index file */
  35.        *df_dat_file;            /* data file */
  36.   inx_rec df_inx_buff;          /* index file buffer */
  37.   inx_rec df_nxt_buff;          /* buffer for read next/previous */
  38.   long df_nxt_ptr;              /* pointer for read next/previous */
  39.   char *df_dat_buff;            /* data file buffer */
  40.   unsigned df_rec_size;         /* data record size */
  41.   int (*df_cmp)();              /* pointer to comparison routine */
  42.   char *df_key_ptr;             /* pointer to key in data buffer */
  43.   unsigned df_key_offset;       /* offset of key from beginning of record */
  44.   char df_flags;                /* flags */
  45.   long df_inx_ptr;              /* current index record */
  46.   long df_dat_ptr;              /* current data record */
  47. } df_rec;
  48.  
  49. #define RTHRD   0x01
  50. #define LTHRD   0x02
  51. #define ETHRD   0x04
  52. #define BTHRD   0x08
  53.  
  54. #define DF_DUP          0x01
  55. #define DF_EOF          0x02
  56. #define DF_TOF          0x04
  57. #define DF_START        0x08
  58. #define DF_DELETE       0x10
  59.  
  60. /* internal support functions */
  61. int isearch(df_rec *db_control, char *key);
  62. int iget_next(df_rec *db_control, inx_rec *irec);
  63. int iget_prev(df_rec *db_control, inx_rec *irec);
  64. int iget_root(df_rec *db_control);
  65. int iread_inx(df_rec *db_control, long seek_pos);
  66. int iwrite_inx(df_rec *db_control, inx_rec *irec, long seek_pos);
  67. int iread_dat(df_rec *db_control, long seek_pos);
  68. int iwrite_dat(df_rec *db_control, void *datrec, long seek_pos);
  69. int ierror(int e);
  70.  
  71. /* comparison routines */
  72. int icmp_uchar(void *arg1, void *arg2);
  73. int icmp_schar(void *arg1, void *arg2);
  74. int icmp_uint(void *arg1, void *arg2);
  75. int icmp_sint(void *arg1, void *arg2);
  76. int icmp_ulong(void *arg1, void *arg2);
  77. int icmp_slong(void *arg1, void *arg2);
  78. int icmp_string(void *arg1, void *arg2);
  79.  
  80. #ifdef FLOAT_KEY
  81. int icmp_float(void *arg1, void *arg2);
  82. int icmp_double(void *arg1, void *arg2);
  83.  
  84. int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint,   icmp_sint,
  85.                         icmp_ulong, icmp_slong, icmp_string, icmp_float,
  86.                         icmp_double};
  87. #else
  88. int (*icmp_rtns[])() = {icmp_uchar, icmp_schar, icmp_uint,   icmp_sint,
  89.                         icmp_ulong, icmp_slong, icmp_string};
  90. #endif
  91.